import axios from 'axios'
import { getToken } from './cookie';
import { removeToken } from './cookie';
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";

const service = axios.create({
    baseURL: "/dev-api",
    timeout: 5000, //5秒种之内后端响应结果没返回,前端会中断请求显示超时错误,设置超时时间的目的是为了提高用户的体验.
})

//响应拦截器(后端发回给前端响应结果之后要做的事情)
service.interceptors.response.use(
    (res) => {  //res : 响应数据
      // 未设置状态码则默认成功状态
      const code = res.data.code;
      const msg = res.data.msg;
      //弥补全局前置守卫的不足在此处处理token过期的情况.
      //token过期要重新登录.
      if (code === 3001) {
        ElMessage.error(msg);
        removeToken()
        return Promise.reject(new Error(msg));
      } else if (code !== 1000) {
        ElMessage.error(msg);
        return Promise.reject(new Error(msg));
      } else {
        return Promise.resolve(res.data);
      }
    },
    (error) => {
      return Promise.reject(error);
    }
);

//请求拦截器(前端发送请求给后端之前)
//请求之前拿到token,使得token和请求一起发送给服务器.
service.interceptors.request.use(
  (config) => {
    if (getToken()) {
      config.headers["Authorization"] = "Bearer " + getToken();
    }
    return config;
  },
  (error) => {
    console.log(error)
    Promise.reject(error);
  }
);

//配置了代理服务之后得请求地址: http://localhost:5173/dev-api/sysUser/login

export default service //暴露本文件,使得其他模块可以使用.